// 你可以通过require.context ()函数来创建自己的context。
// 可以给这个函数传入4个参数:
// 1.一个要搜索的目录,
// 2.一个标记表示是否还要搜索其子目录,
// 3.一个匹配文件的正则表达式。
//自动创建路由配置  keys方法  可以获取所有模块的流经 返回的是一个数组
let fils = require.context("../Pages", true, /\.vue$/);
//传page文件，需要搜索其子目录，匹配vue 结尾的文  件
// console.log("这个是路由页面配置的自动路由fils", fils.keys());
let repeatrouter = fils.keys().map((path) => {
  //map返回数组
  //可以得到组件的实例
  let regExp = /(\/index\.vue|\.vue)$/;
  //使用正则把/Home/Users/index.vue"这的变  /Home/Users
  //过滤index.vue 和
  let com = fils(path).default;
  // 可以获取组件

  path = path.replace(regExp, "").substring(1);

  return {
    redirect: com.redirect ?? null,
    name: com.name ?? path.substring(1).split("/").join("-"),
    meta: com.meta ?? {},
    //组件中有meta 也是可以获取到  路由元信息
    path: path.toLowerCase(),
    component: () => import("@/Pages" + path),
  };
});

//扁平化路由配置
//需要换成树形数据（childen）
//  id 每条数据添加id  嵌套的加上  pid
//将path作为当前对象的id
const convertTree = (repeatRutrt) => {
  let treerouters = [];
  //声明空数组用于存放树形的rputes设置
  repeatRutrt.forEach((route) => {
    //将path作为当前对象的id
    let patharr = route.path.substring(1).split("/");

    //每个对象都有ID
    route.id = patharr.join("-");
    if (patharr.length > 1) {
      let pidarr = [...patharr]; //浅拷贝
      pidarr.pop();
      route.pid = pidarr.join("-");
    }
  });
  //把平铺数据变成嵌套树形数据
  //找数据的ip和pid相等的

  repeatRutrt.forEach((route) => {
    // console.log(route);
    let parent = repeatRutrt.find((v) => v.id === route.pid);
    // console.log(parent);
    // console.log(route);
    if (parent) {
      //当前的route对象 找到父节点
      //判断父节点有没有children 属性 没有就添加
      if (!parent.children) {
        parent.children = [];
      }
      route.path = route.path.split("/").pop();
      // console.log(route);
      // debugger;
      parent.children.push(route);
      // console.log(parent);
    } else {
      treerouters.push(route);
    }
  });
  return treerouters;
};

let result = convertTree(repeatrouter);

// console.log("这个是路由页面配置的自动路由result", result);
// console.log(result);
export default result;
// console.log("这个是路由页面配置的自动路由deepresult", result);
//这个结果的目的是构建Pages 文件夹所有的文件构建成一个树形的数组==一个路由组件
//构建==一个路由组件
